#ifndef StmtTable_h
#define StmtTable_h

#include "Standards.h"

/*! StmtTable Class */
class StmtTable {
	public:
		
		//! Constructor
		StmtTable();
		int count;
		unordered_map<INDEX, DESIGN_ENTITY> stmtTable; //!< The table itself
		unordered_multimap<INDEX, string> callsProcTable;
		unordered_multimap<INDEX, string> callsStmtTable;
		unordered_map<INDEX, string> patternTable;
		unordered_map<INDEX, set<INDEX>> affectTable;

		NAME getStmtDE(INDEX);
		
		//! A method that gets the size of the table
		/*!
		  \return The size of the table
		*/
		int getSize();

		//! A method that stores the statements and their design entities in stmtTable
		/*!
		  \param INDEX stmt index
		  \param DESIGN_ENTITY design-entity of stmt (while|assign|if|call)
		*/
		void insertStmt(INDEX, DESIGN_ENTITY);
		
		//! A method that prints the contents of the stmtTable
		void printStmtTable();

		string buildPattern(vector<string>);
		string buildPatternB(vector<string>);

	private:
};

#endif